4.6 Working with ModelDriven actions
- 도메인 오브젝트를 유연하게 생성 할 수 있다? 소스 코드를 보면 이해가 될 듯합니다.ㅜ.ㅜ
- Action에서 com.opensymphony.xwork.ModelDriven 인터페이스를 구현하면 된다.
4.6.1 Implementing ModelDriven actions
- ModelDriven 에는 하나의 메소드만 있다.
public Object getModel()
① ModelDriven을 사용하지 않은 방법
public class UpdateUser extends ActionSupport implements UserDAOAware, Preparable, SessionAware {
UserDAO userDAO;
Map session;
User user;
public void setSession(Map session) {
this.session = session;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void prepare() throws Exception {
Long id = ((User)session.get(AuthenticationInterceptor.USER)).getId();
user = userDAO.getUserById(id, false);
}
public String execute() throws Exception {
userDAO.makePersistent(user);
return SUCCESS;
}
public String doDefault() throws Exception {
return INPUT;
}
public User getUser() {
return user;
}
}
<ww:form action="updateProfile" method="post">
<ww:textfield label="%{getText('firstname')}"name="user.firstname"/>
<ww:textfield label="%{getText('lastname')}" name="user.lastname"/>
<ww:textfield label="%{getText('email')}" name="user.email"/>
<ww:radio label="%{getText('gender')}" name="user.gender" blist="#{0 : getText('gender.male'),b1 : getText('gender.female')}"/>
<ww:textfield label="%{getText('address.street')}" name="user.address.street"/>
<ww:textfield label="%{getText('address.zipcode')}" name="user.address.zipcode"/>
<ww:textfield label="%{getText('address.city')}" name="user.address.city"/>
<ww:select label="%{getText('address.state')}" name="user.address.state" list="{'Californa', 'Oregon'}"/>
<ww:select label="%{getText('address.country')}" name="user.address.country" list="{'USA', 'Canada', 'Mexico', 'Other'}"/>
<ww:checkbox label="%{getText('address.poBox')}" name="user.address.poBox" fieldValue="true"/>
<ww:submit value="%{getText('updateProfile')}"/>
</ww:form>
② ModelDriven을 사용한 방법
public class UpdateUser extends ActionSupport implements UserDAOAware, Preparable, SessionAware, ModelDriven {
UserDAO userDAO;
Map session;
User user;
public void setSession(Map session) {
this.session = session;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void prepare() throws Exception {
Long id = ((User)session.get(AuthenticationInterceptor.USER)).getId();
user = userDAO.getUserById(id, false);
}
public String execute() throws Exception {
userDAO.makePersistent(user);
return SUCCESS;
}
public String doDefault() throws Exception {
return INPUT;
}
//Change to getModel() to return User object
public Object getModel() {
return user;
}
}
//user. 이 사라졌다.
<ww:form action="updateProfile" method="post">
<ww:textfield label="%{getText('firstname')}" name="firstname"/>
<ww:textfield label="%{getText('lastname')}" name="lastname"/>
<ww:textfield label="%{getText('email')}" name="email"/>
<ww:radio label="%{getText('gender')}" name="gender" blist="#{0 : getText('gender.male'),b1 : getText('gender.female')}"/>
<ww:textfield label="%{getText('address.street')}" name="address.street"/>
<ww:textfield label="%{getText('address.zipcode')}" name="address.zipcode"/>
<ww:textfield label="%{getText('address.city')}" name="address.city"/>
<ww:select label="%{getText('address.state')}" name="address.state" list="{'Californa', 'Oregon'}"/>
<ww:select label="%{getText('address.country')}" name="address.country" list="{'USA', 'Canada', 'Mexico', 'Other'}"/>
<ww:checkbox label="%{getText('address.poBox')}" name="address.poBox" fieldValue="true"/>
<ww:submit value="%{getText('updateProfile')}"/>
</ww:form>
문서에 대하여